/**
 * 删除年度
 * 
 * 删除年度就删除与年度相关的学生和科研题目
 * 
 * /xingzheng/year/del
 * 
 */


const Year = require('../../../models/years')
const Student = require('../../../models/researchTopicStudents')
const Topics = require('../../../models/researchTopics')
const Company = require('../../../models/companys')
const Internship = require('../../../models/internshipStudents')
const utils = require('../../../utils/index')
const $ = require('../../../utils/common')
const MySQLManager = require('../../../utils/MySQLManager');
const sequelize = MySQLManager

const del = async function (req, res) {
    try {
        // 检验参数
        if (!req.body.year_id) {
            $.sendMessage(res, 1015, 'year_id 必须要有')
            return
        }

        var year = await Year.findOne({
            where: {
                id: req.body.year_id
            }
        })

        if (year == null) {
            $.sendMessage(res, 1015, '无效id')
            return
        }

        // 如果是入所相关年度，则删除入所学生数据和相关的科研题目数据
        
        if (year.dataValues.type == '0') {
            // 删除事务
            return sequelize.transaction(function (t) {
                
                return Student.destroy(
                {
                    where: {
                        student_year: req.body.year_id
                    }
                }
                , 
                {transaction: t}).then(function (user) {
                    return Topics.destroy(
                    {
                        where: {
                            years: req.body.year_id    
                        }
                    }
                    , {transaction: t}).then(user => {
                        return Year.destroy({
                            where: {
                                id: req.body.year_id
                            }
                        }, {transaction: t})
                    })
                });
                
                }).then(function (result) {
                    res.json({
                        code: 200,
                        message: '删除成功',
                        result: result
                    })
                // 事务已被提交
                // result 是 promise 链返回到事务回调的结果

                // // 日志
                utils.create_a_log(req, '年度管理', '删除年度')
                }).catch(function (err) {
                    res.json({
                        code: 1017,
                        message: '删除失败',
                        err: err
                    })
                // 事务已被回滚
                // err 是拒绝 promise 链返回到事务回调的错误
                })
        }

        // 如果是实习年度，则删除实习岗位和学生
        if (year.dataValues.type == '1') {
             // 删除事务
             return sequelize.transaction(function (t) {
                
                return Internship.destroy(
                {
                    where: {
                        student_year: req.body.year_id
                    }
                }
                , 
                {transaction: t}).then(function (user) {
                    return Company.destroy(
                    {
                        where: {
                            company_year: req.body.year_id    
                        }
                    }
                    , {transaction: t}).then(user => {
                        return Year.destroy({
                            where: {
                                id: req.body.year_id
                            }
                        }, {transaction: t})
                    })
                });
                
                }).then(function (result) {
                    res.json({
                        code: 200,
                        message: '删除成功',
                        result: result
                    })
                // 事务已被提交
                // result 是 promise 链返回到事务回调的结果

                // // 日志
                utils.create_a_log(req, '年度管理', '删除年度')

                }).catch(function (err) {
                    res.json({
                        code: 1017,
                        message: '删除失败',
                        err: 'err' + err
                    })
                })
        }

    }
    catch(error) {
        res.json({
            message: "抓到异常",
            error: 'error' + error
        })
        utils.create_a_log(req, '年度管理', '删除', '失败')
    } 
}
    
module.exports = del